home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Cross Platform / QuickTime 4.1.2 Windows SDK / CIncludes / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-12  |  23.8 KB  |  817 lines  |  [TEXT/R*ch]

  1. /*
  2.      File:        QD3DIO.h
  3.  
  4.      Contains:    QuickDraw 3D IO API                                                
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.6
  7.                  Release:    QuickTime 4.1
  8.  
  9.      Copyright:    (c) 1995-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DIO__
  18. #define __QD3DIO__
  19.  
  20. #ifndef __QD3D__
  21.     #include <QD3D.h>
  22. #endif
  23.  
  24.  
  25. #ifndef __QD3DDRAWCONTEXT__
  26.     #include <QD3DDrawContext.h>
  27. #endif
  28.  
  29. #ifndef __QD3DVIEW__
  30.     #include <QD3DView.h>
  31. #endif
  32.  
  33.  
  34.  
  35.  
  36. #if PRAGMA_ONCE
  37. #pragma once
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_STRUCT_ALIGN
  49.     #pragma options align=power
  50. #elif PRAGMA_STRUCT_PACKPUSH
  51.     #pragma pack(push, 2)
  52. #elif PRAGMA_STRUCT_PACK
  53.     #pragma pack(2)
  54. #endif
  55.  
  56. #if PRAGMA_ENUM_ALWAYSINT
  57.     #pragma enumsalwaysint on
  58. #elif PRAGMA_ENUM_OPTIONS
  59.     #pragma option enum=int
  60. #elif PRAGMA_ENUM_PACK
  61.     #if __option(pack_enums)
  62.         #define PRAGMA_ENUM_PACK__QD3DIO__
  63.     #endif
  64.     #pragma options(!pack_enums)
  65. #endif
  66.  
  67. /******************************************************************************
  68.  **                                                                              **
  69.  **                                    Basic Types                                 **                                                    
  70.  **                                                                              **
  71.  *****************************************************************************/
  72. typedef unsigned char                     TQ3Uns8;
  73. typedef signed char                     TQ3Int8;
  74. typedef unsigned short                     TQ3Uns16;
  75. typedef signed short                     TQ3Int16;
  76. typedef unsigned long                     TQ3Uns32;
  77. typedef signed long                     TQ3Int32;
  78. #if TARGET_RT_BIG_ENDIAN
  79.  
  80. struct TQ3Uns64 {
  81.     unsigned long                     hi;
  82.     unsigned long                     lo;
  83. };
  84. typedef struct TQ3Uns64                    TQ3Uns64;
  85.  
  86. struct TQ3Int64 {
  87.     signed long                     hi;
  88.     unsigned long                     lo;
  89. };
  90. typedef struct TQ3Int64                    TQ3Int64;
  91. #else
  92.  
  93. struct TQ3Uns64 {
  94.     unsigned long                     lo;
  95.     unsigned long                     hi;
  96. };
  97. typedef struct TQ3Uns64                    TQ3Uns64;
  98.  
  99. struct TQ3Int64 {
  100.     unsigned long                     lo;
  101.     signed long                     hi;
  102. };
  103. typedef struct TQ3Int64                    TQ3Int64;
  104. #endif  /* TARGET_RT_BIG_ENDIAN */
  105.  
  106.  
  107. typedef float                             TQ3Float32;
  108. typedef double                             TQ3Float64;
  109. typedef TQ3Uns32                         TQ3Size;
  110. /******************************************************************************
  111.  **                                                                              **
  112.  **                                    File Types                                 **
  113.  **                                                                              **
  114.  *****************************************************************************/
  115.  
  116. enum TQ3FileModeMasks {
  117.     kQ3FileModeNormal            = 0,
  118.     kQ3FileModeStream            = 1 << 0,
  119.     kQ3FileModeDatabase            = 1 << 1,
  120.     kQ3FileModeText                = 1 << 2
  121. };
  122. typedef enum TQ3FileModeMasks TQ3FileModeMasks;
  123.  
  124. typedef unsigned long                     TQ3FileMode;
  125. /******************************************************************************
  126.  **                                                                              **
  127.  **                                    Method Types                             **
  128.  **                                                                              **
  129.  *****************************************************************************/
  130. /*
  131.  *    IO Methods
  132.  *
  133.  *    The IO system treats all objects as groups of typed information.
  134.  *    When you register your element or attribute, the "elementType" is the 
  135.  *    binary type of your object, the "elementName" the ascii type.
  136.  *    
  137.  *    All objects in the metafile are made up of a "root" or parent object which
  138.  *    defines the instantiated object type. You may define the format of your 
  139.  *    data any way you wish as long as you use the primitives types above and the
  140.  *    routines below.
  141.  *
  142.  *    Root Objects are often appended with additional child objects, called 
  143.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  144.  *    
  145.  *    Writing is straightforward: an object traverses itself any other objects 
  146.  *    that make it up, then writes its own data. Writing uses two methods: 
  147.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  148.  *
  149.  *    The TQ3XObjectTraverseMethod method should:
  150.  *    + First, Determine if the data should be written 
  151.  *        - if you don't want to write out your object after examining your
  152.  *            data, return kQ3Success in your Traverse method without calling
  153.  *            any other submit calls.
  154.  *     + Next, calculate the size of your object on disk
  155.  *     + Gather whatever state from the view you need to preserve
  156.  *         - you may access the view state NOW, as the state of the
  157.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  158.  *             pass a temporary buffer to your write method.
  159.  *     + Submit your view write data using Q3View_SubmitWriteData
  160.  *         - note that you MUST call this before any other "_Submit" call.
  161.  *         - you may pass in a "deleteMethod" for your data. This method
  162.  *             will be called whether or not your write method succeeds or fails.
  163.  *     + Submit your subobjects to the view
  164.  *     
  165.  *     The TQ3XObjectWriteMethod method should:
  166.  *     + Write your data format to the file using the primitives routines below.
  167.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  168.  *             method will be called upon exit of your write method.
  169.  *
  170.  *    Reading is less straightforward because your root object and
  171.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  172.  *    is an implicit state contained in the file while reading, which you must 
  173.  *    be aware of. When you first enter the read method, you must physically 
  174.  *    read in your data format using the primitives routines until
  175.  *    
  176.  *    Q3File_IsEndOfData(file) == kQ3True
  177.  *    
  178.  *    Generally, your data format should be self-descriptive such that you do not
  179.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  180.  *    However, this call is useful for determining zero-sized object or 
  181.  *    determining the end of an object's data.
  182.  *    
  183.  *    Once you have read in all the data, you may collect subobjects. A metafile
  184.  *    object ONLY has subobjects if it is in a container. The call
  185.  *    
  186.  *    Q3File_IsEndOfContainer(file)
  187.  *    
  188.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  189.  *    exist.
  190.  *    
  191.  *    At this point, you may use
  192.  *    
  193.  *    Q3File_GetNextObjectType
  194.  *    Q3File_IsNextObjectOfType
  195.  *    Q3File_ReadObject
  196.  *    Q3File_SkipObject
  197.  *    
  198.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  199.  *    is kQ3True.
  200.  * 
  201.  */
  202.  
  203. /*
  204.  * IO Methods
  205.  */
  206. enum {
  207.     kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'),    /* version */
  208.     kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'),        /* byte count */
  209.     kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'),    /* byte count */
  210.     kQ3XMethodTypeObjectWrite    = FOUR_CHAR_CODE('writ'),        /* Dump info to file */
  211.     kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'),        /* Read info from file into buffer or, attach read data to parent */
  212.     kQ3XMethodTypeObjectRead    = FOUR_CHAR_CODE('read'),
  213.     kQ3XMethodTypeObjectAttach    = FOUR_CHAR_CODE('attc')
  214. };
  215.  
  216. /*
  217.  *    TQ3XObjectTraverseMethod
  218.  *
  219.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  220.  *    object. Sorry, custom objects will be available in the next major revision.
  221.  *
  222.  *    The "data" is a pointer to your internal element data.
  223.  *
  224.  *    The view is the current traversal view.
  225.  */
  226. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  227. /*
  228.  *  TQ3XObjectTraverseDataMethod
  229.  */
  230. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  231. /*
  232.  *  TQ3XObjectWriteMethod
  233.  */
  234. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  235. /*
  236.  *  Custom object writing 
  237.  */
  238. typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data);
  239. EXTERN_API_C( TQ3Status )
  240. Q3XView_SubmitWriteData            (TQ3ViewObject             view,
  241.                                  TQ3Size                 size,
  242.                                  void *                    data,
  243.                                  TQ3XDataDeleteMethod     deleteData);
  244.  
  245. EXTERN_API_C( TQ3Status )
  246. Q3XView_SubmitSubObjectData        (TQ3ViewObject             view,
  247.                                  TQ3XObjectClass         objectClass,
  248.                                  unsigned long             size,
  249.                                  void *                    data,
  250.                                  TQ3XDataDeleteMethod     deleteData);
  251.  
  252. /*
  253.  *  TQ3XObjectReadMethod
  254.  */
  255. typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
  256. /*
  257.  *    TQ3XObjectReadDataMethod
  258.  *
  259.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  260.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  261.  *
  262.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  263.  */
  264. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  265. /*
  266.  *  TQ3XObjectAttachMethod
  267.  */
  268. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);
  269.  
  270.  
  271. /******************************************************************************
  272.  **                                                                              **
  273.  **                                Versioning                                     **
  274.  **                                                                              **
  275.  *****************************************************************************/
  276.  
  277. #define Q3FileVersion(majorVersion, minorVersion)    (TQ3FileVersion) \
  278.     ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  279.  
  280. typedef unsigned long                     TQ3FileVersion;
  281. #define kQ3FileVersionCurrent    Q3FileVersion(1,6)
  282.  
  283. /******************************************************************************
  284.  **                                                                              **
  285.  **                                File Routines                                 **
  286.  **                                                                              **
  287.  *****************************************************************************/
  288. /*
  289.  * Creation and accessors
  290.  */
  291. EXTERN_API_C( TQ3FileObject )
  292. Q3File_New                        (void);
  293.  
  294. EXTERN_API_C( TQ3Status )
  295. Q3File_GetStorage                (TQ3FileObject             theFile,
  296.                                  TQ3StorageObject *        storage);
  297.  
  298. EXTERN_API_C( TQ3Status )
  299. Q3File_SetStorage                (TQ3FileObject             theFile,
  300.                                  TQ3StorageObject         storage);
  301.  
  302. /*
  303.  * Opening, and accessing "open" state, closing/cancelling
  304.  */
  305. EXTERN_API_C( TQ3Status )
  306. Q3File_OpenRead                    (TQ3FileObject             theFile,
  307.                                  TQ3FileMode *            mode);
  308.  
  309. EXTERN_API_C( TQ3Status )
  310. Q3File_OpenWrite                (TQ3FileObject             theFile,
  311.                                  TQ3FileMode             mode);
  312.  
  313. EXTERN_API_C( TQ3Status )
  314. Q3File_IsOpen                    (TQ3FileObject             theFile,
  315.                                  TQ3Boolean *            isOpen);
  316.  
  317. EXTERN_API_C( TQ3Status )
  318. Q3File_GetMode                    (TQ3FileObject             theFile,
  319.                                  TQ3FileMode *            mode);
  320.  
  321. EXTERN_API_C( TQ3Status )
  322. Q3File_GetVersion                (TQ3FileObject             theFile,
  323.                                  TQ3FileVersion *        version);
  324.  
  325. EXTERN_API_C( TQ3Status )
  326. Q3File_Close                    (TQ3FileObject             theFile);
  327.  
  328. EXTERN_API_C( TQ3Status )
  329. Q3File_Cancel                    (TQ3FileObject             theFile);
  330.  
  331. /*
  332.  * Writing (Application)
  333.  */
  334. EXTERN_API_C( TQ3Status )
  335. Q3View_StartWriting                (TQ3ViewObject             view,
  336.                                  TQ3FileObject             theFile);
  337.  
  338. EXTERN_API_C( TQ3ViewStatus )
  339. Q3View_EndWriting                (TQ3ViewObject             view);
  340.  
  341. /*
  342.  * Reading (Application)
  343.  */
  344. EXTERN_API_C( TQ3ObjectType )
  345. Q3File_GetNextObjectType        (TQ3FileObject             theFile);
  346.  
  347. EXTERN_API_C( TQ3Boolean )
  348. Q3File_IsNextObjectOfType        (TQ3FileObject             theFile,
  349.                                  TQ3ObjectType             ofType);
  350.  
  351. EXTERN_API_C( TQ3Object )
  352. Q3File_ReadObject                (TQ3FileObject             theFile);
  353.  
  354. EXTERN_API_C( TQ3Status )
  355. Q3File_SkipObject                (TQ3FileObject             theFile);
  356.  
  357. EXTERN_API_C( TQ3Boolean )
  358. Q3File_IsEndOfData                (TQ3FileObject             theFile);
  359.  
  360. EXTERN_API_C( TQ3Boolean )
  361. Q3File_IsEndOfContainer            (TQ3FileObject             theFile,
  362.                                  TQ3Object                 rootObject);
  363.  
  364. EXTERN_API_C( TQ3Boolean )
  365. Q3File_IsEndOfFile                (TQ3FileObject             theFile);
  366.  
  367. /*    
  368.  *  External file references
  369.  */
  370. EXTERN_API_C( TQ3Status )
  371. Q3File_MarkAsExternalReference    (TQ3FileObject             theFile,
  372.                                  TQ3SharedObject         sharedObject);
  373.  
  374. EXTERN_API_C( TQ3GroupObject )
  375. Q3File_GetExternalReferences    (TQ3FileObject             theFile);
  376.  
  377. /*    
  378.  *  Tracking editing in read-in objects with custom elements
  379.  */
  380. EXTERN_API_C( TQ3Status )
  381. Q3Shared_ClearEditTracking        (TQ3SharedObject         sharedObject);
  382.  
  383. EXTERN_API_C( TQ3Boolean )
  384. Q3Shared_GetEditTrackingState    (TQ3SharedObject         sharedObject);
  385.  
  386. /*    
  387.  *  Reading objects inside a group one-by-one
  388.  */
  389.  
  390. enum TQ3FileReadGroupStateMasks {
  391.     kQ3FileReadWholeGroup        = 0,
  392.     kQ3FileReadObjectsInGroup    = 1 << 0,
  393.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  394. };
  395. typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;
  396.  
  397. typedef unsigned long                     TQ3FileReadGroupState;
  398. EXTERN_API_C( TQ3Status )
  399. Q3File_SetReadInGroup            (TQ3FileObject             theFile,
  400.                                  TQ3FileReadGroupState     readGroupState);
  401.  
  402. EXTERN_API_C( TQ3Status )
  403. Q3File_GetReadInGroup            (TQ3FileObject             theFile,
  404.                                  TQ3FileReadGroupState * readGroupState);
  405.  
  406.  
  407. /*
  408.  * Idling
  409.  */
  410. typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
  411. EXTERN_API_C( TQ3Status )
  412. Q3File_SetIdleMethod            (TQ3FileObject             theFile,
  413.                                  TQ3FileIdleMethod         idle,
  414.                                  const void *            idleData);
  415.  
  416.  
  417. /******************************************************************************
  418.  **                                                                              **
  419.  **                                Primitives Routines                             **
  420.  **                                                                              **
  421.  *****************************************************************************/
  422. EXTERN_API_C( TQ3Status )
  423. Q3NewLine_Write                    (TQ3FileObject             theFile);
  424.  
  425. EXTERN_API_C( TQ3Status )
  426. Q3Uns8_Read                        (TQ3Uns8 *                data,
  427.                                  TQ3FileObject             theFile);
  428.  
  429. EXTERN_API_C( TQ3Status )
  430. Q3Uns8_Write                    (TQ3Uns8                 data,
  431.                                  TQ3FileObject             theFile);
  432.  
  433. EXTERN_API_C( TQ3Status )
  434. Q3Uns16_Read                    (TQ3Uns16 *                data,
  435.                                  TQ3FileObject             theFile);
  436.  
  437. EXTERN_API_C( TQ3Status )
  438. Q3Uns16_Write                    (TQ3Uns16                 data,
  439.                                  TQ3FileObject             theFile);
  440.  
  441. EXTERN_API_C( TQ3Status )
  442. Q3Uns32_Read                    (TQ3Uns32 *                data,
  443.                                  TQ3FileObject             theFile);
  444.  
  445. EXTERN_API_C( TQ3Status )
  446. Q3Uns32_Write                    (TQ3Uns32                 data,
  447.                                  TQ3FileObject             theFile);
  448.  
  449. EXTERN_API_C( TQ3Status )
  450. Q3Int8_Read                        (TQ3Int8 *                data,
  451.                                  TQ3FileObject             theFile);
  452.  
  453. EXTERN_API_C( TQ3Status )
  454. Q3Int8_Write                    (TQ3Int8                 data,
  455.                                  TQ3FileObject             theFile);
  456.  
  457. EXTERN_API_C( TQ3Status )
  458. Q3Int16_Read                    (TQ3Int16 *                data,
  459.                                  TQ3FileObject             theFile);
  460.  
  461. EXTERN_API_C( TQ3Status )
  462. Q3Int16_Write                    (TQ3Int16                 data,
  463.                                  TQ3FileObject             theFile);
  464.  
  465. EXTERN_API_C( TQ3Status )
  466. Q3Int32_Read                    (TQ3Int32 *                data,
  467.                                  TQ3FileObject             theFile);
  468.  
  469. EXTERN_API_C( TQ3Status )
  470. Q3Int32_Write                    (TQ3Int32                 data,
  471.                                  TQ3FileObject             theFile);
  472.  
  473. EXTERN_API_C( TQ3Status )
  474. Q3Uns64_Read                    (TQ3Uns64 *                data,
  475.                                  TQ3FileObject             theFile);
  476.  
  477. EXTERN_API_C( TQ3Status )
  478. Q3Uns64_Write                    (TQ3Uns64                 data,
  479.                                  TQ3FileObject             theFile);
  480.  
  481. EXTERN_API_C( TQ3Status )
  482. Q3Int64_Read                    (TQ3Int64 *                data,
  483.                                  TQ3FileObject             theFile);
  484.  
  485. EXTERN_API_C( TQ3Status )
  486. Q3Int64_Write                    (TQ3Int64                 data,
  487.                                  TQ3FileObject             theFile);
  488.  
  489. EXTERN_API_C( TQ3Status )
  490. Q3Float32_Read                    (TQ3Float32 *            data,
  491.                                  TQ3FileObject             theFile);
  492.  
  493. EXTERN_API_C( TQ3Status )
  494. Q3Float32_Write                    (TQ3Float32             data,
  495.                                  TQ3FileObject             theFile);
  496.  
  497. EXTERN_API_C( TQ3Status )
  498. Q3Float64_Read                    (TQ3Float64 *            data,
  499.                                  TQ3FileObject             theFile);
  500.  
  501. EXTERN_API_C( TQ3Status )
  502. Q3Float64_Write                    (TQ3Float64             data,
  503.                                  TQ3FileObject             theFile);
  504.  
  505. EXTERN_API_C( TQ3Size )
  506. Q3Size_Pad                        (TQ3Size                 size);
  507.  
  508. /*
  509.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  510.  */
  511. EXTERN_API_C( TQ3Status )
  512. Q3String_Read                    (char *                    data,
  513.                                  unsigned long *        length,
  514.                                  TQ3FileObject             theFile);
  515.  
  516. EXTERN_API_C( TQ3Status )
  517. Q3String_Write                    (const char *            data,
  518.                                  TQ3FileObject             theFile);
  519.  
  520. /* 
  521.  * This call will read Q3Size_Pad(size) bytes,
  522.  *    but only place size bytes into data.
  523.  */
  524. EXTERN_API_C( TQ3Status )
  525. Q3RawData_Read                    (unsigned char *        data,
  526.                                  unsigned long             size,
  527.                                  TQ3FileObject             theFile);
  528.  
  529. /* 
  530.  * This call will write Q3Size_Pad(size) bytes,
  531.  *    adding 0's to pad to the nearest 4 byte boundary.
  532.  */
  533. EXTERN_API_C( TQ3Status )
  534. Q3RawData_Write                    (const unsigned char *    data,
  535.                                  unsigned long             size,
  536.                                  TQ3FileObject             theFile);
  537.  
  538. /******************************************************************************
  539.  **                                                                              **
  540.  **                        Convenient Primitives Routines                         **
  541.  **                                                                              **
  542.  *****************************************************************************/
  543. EXTERN_API_C( TQ3Status )
  544. Q3Point2D_Read                    (TQ3Point2D *            point2D,
  545.                                  TQ3FileObject             theFile);
  546.  
  547. EXTERN_API_C( TQ3Status )
  548. Q3Point2D_Write                    (const TQ3Point2D *        point2D,
  549.                                  TQ3FileObject             theFile);
  550.  
  551. EXTERN_API_C( TQ3Status )
  552. Q3Point3D_Read                    (TQ3Point3D *            point3D,
  553.                                  TQ3FileObject             theFile);
  554.  
  555. EXTERN_API_C( TQ3Status )
  556. Q3Point3D_Write                    (const TQ3Point3D *        point3D,
  557.                                  TQ3FileObject             theFile);
  558.  
  559. EXTERN_API_C( TQ3Status )
  560. Q3RationalPoint3D_Read            (TQ3RationalPoint3D *    point3D,
  561.                                  TQ3FileObject             theFile);
  562.  
  563. EXTERN_API_C( TQ3Status )
  564. Q3RationalPoint3D_Write            (const TQ3RationalPoint3D * point3D,
  565.                                  TQ3FileObject             theFile);
  566.  
  567. EXTERN_API_C( TQ3Status )
  568. Q3RationalPoint4D_Read            (TQ3RationalPoint4D *    point4D,
  569.                                  TQ3FileObject             theFile);
  570.  
  571. EXTERN_API_C( TQ3Status )
  572. Q3RationalPoint4D_Write            (const TQ3RationalPoint4D * point4D,
  573.                                  TQ3FileObject             theFile);
  574.  
  575. EXTERN_API_C( TQ3Status )
  576. Q3Vector2D_Read                    (TQ3Vector2D *            vector2D,
  577.                                  TQ3FileObject             theFile);
  578.  
  579. EXTERN_API_C( TQ3Status )
  580. Q3Vector2D_Write                (const TQ3Vector2D *    vector2D,
  581.                                  TQ3FileObject             theFile);
  582.  
  583. EXTERN_API_C( TQ3Status )
  584. Q3Vector3D_Read                    (TQ3Vector3D *            vector3D,
  585.                                  TQ3FileObject             theFile);
  586.  
  587. EXTERN_API_C( TQ3Status )
  588. Q3Vector3D_Write                (const TQ3Vector3D *    vector3D,
  589.                                  TQ3FileObject             theFile);
  590.  
  591. EXTERN_API_C( TQ3Status )
  592. Q3Matrix4x4_Read                (TQ3Matrix4x4 *            matrix4x4,
  593.                                  TQ3FileObject             theFile);
  594.  
  595. EXTERN_API_C( TQ3Status )
  596. Q3Matrix4x4_Write                (const TQ3Matrix4x4 *    matrix4x4,
  597.                                  TQ3FileObject             theFile);
  598.  
  599. EXTERN_API_C( TQ3Status )
  600. Q3Tangent2D_Read                (TQ3Tangent2D *            tangent2D,
  601.                                  TQ3FileObject             theFile);
  602.  
  603. EXTERN_API_C( TQ3Status )
  604. Q3Tangent2D_Write                (const TQ3Tangent2D *    tangent2D,
  605.                                  TQ3FileObject             theFile);
  606.  
  607. EXTERN_API_C( TQ3Status )
  608. Q3Tangent3D_Read                (TQ3Tangent3D *            tangent3D,
  609.                                  TQ3FileObject             theFile);
  610.  
  611. EXTERN_API_C( TQ3Status )
  612. Q3Tangent3D_Write                (const TQ3Tangent3D *    tangent3D,
  613.                                  TQ3FileObject             theFile);
  614.  
  615. /*    This call affects only text Files - it is a no-op in binary files */
  616. EXTERN_API_C( TQ3Status )
  617. Q3Comment_Write                    (char *                    comment,
  618.                                  TQ3FileObject             theFile);
  619.  
  620. /******************************************************************************
  621.  **                                                                              **
  622.  **                                Unknown Object                                 **
  623.  **                                                                              **
  624.  **        Unknown objects are generated when reading files which contain         **
  625.  **        custom data which has not been registered in the current             **
  626.  **        instantiation of QuickDraw 3D.                                         **
  627.  **                                                                              **
  628.  *****************************************************************************/
  629. EXTERN_API_C( TQ3ObjectType )
  630. Q3Unknown_GetType                (TQ3UnknownObject         unknownObject);
  631.  
  632. EXTERN_API_C( TQ3Status )
  633. Q3Unknown_GetDirtyState            (TQ3UnknownObject         unknownObject,
  634.                                  TQ3Boolean *            isDirty);
  635.  
  636. EXTERN_API_C( TQ3Status )
  637. Q3Unknown_SetDirtyState            (TQ3UnknownObject         unknownObject,
  638.                                  TQ3Boolean             isDirty);
  639.  
  640.  
  641. /******************************************************************************
  642.  **                                                                              **
  643.  **                            Unknown Text Routines                             **
  644.  **                                                                              **
  645.  *****************************************************************************/
  646.  
  647. struct TQ3UnknownTextData {
  648.     char *                            objectName;                    /* '\0' terminated */
  649.     char *                            contents;                    /* '\0' terminated */
  650. };
  651. typedef struct TQ3UnknownTextData        TQ3UnknownTextData;
  652. EXTERN_API_C( TQ3Status )
  653. Q3UnknownText_GetData            (TQ3UnknownObject         unknownObject,
  654.                                  TQ3UnknownTextData *    unknownTextData);
  655.  
  656. EXTERN_API_C( TQ3Status )
  657. Q3UnknownText_EmptyData            (TQ3UnknownTextData *    unknownTextData);
  658.  
  659.  
  660. /******************************************************************************
  661.  **                                                                              **
  662.  **                            Unknown Binary Routines                             **
  663.  **                                                                              **
  664.  *****************************************************************************/
  665.  
  666. struct TQ3UnknownBinaryData {
  667.     TQ3ObjectType                     objectType;
  668.     unsigned long                     size;
  669.     TQ3Endian                         byteOrder;
  670.     char *                            contents;
  671. };
  672. typedef struct TQ3UnknownBinaryData        TQ3UnknownBinaryData;
  673. EXTERN_API_C( TQ3Status )
  674. Q3UnknownBinary_GetData            (TQ3UnknownObject         unknownObject,
  675.                                  TQ3UnknownBinaryData *    unknownBinaryData);
  676.  
  677. EXTERN_API_C( TQ3Status )
  678. Q3UnknownBinary_EmptyData        (TQ3UnknownBinaryData *    unknownBinaryData);
  679.  
  680.  
  681. EXTERN_API_C( TQ3Status )
  682. Q3UnknownBinary_GetTypeString    (TQ3UnknownObject         unknownObject,
  683.                                  char **                typeString);
  684.  
  685. EXTERN_API_C( TQ3Status )
  686. Q3UnknownBinary_EmptyTypeString    (char **                typeString);
  687.  
  688. /******************************************************************************
  689.  **                                                                              **
  690.  **                            ViewHints routines                                 **
  691.  **                                                                              **
  692.  **        ViewHints are an object in a metafile to give you some hints on how     **
  693.  **        to render a scene.    You may create a view with any of the objects     **
  694.  **        retrieved from it, or you can just throw it away.                     **
  695.  **                                                                              **
  696.  **        To write a view hints to a file, create a view hints object from a     **
  697.  **        view and write the view hints.                                         **
  698.  **                                                                              **
  699.  *****************************************************************************/
  700. EXTERN_API_C( TQ3ViewHintsObject )
  701. Q3ViewHints_New                    (TQ3ViewObject             view);
  702.  
  703. EXTERN_API_C( TQ3Status )
  704. Q3ViewHints_SetRenderer            (TQ3ViewHintsObject     viewHints,
  705.                                  TQ3RendererObject         renderer);
  706.  
  707. EXTERN_API_C( TQ3Status )
  708. Q3ViewHints_GetRenderer            (TQ3ViewHintsObject     viewHints,
  709.                                  TQ3RendererObject *    renderer);
  710.  
  711. EXTERN_API_C( TQ3Status )
  712. Q3ViewHints_SetCamera            (TQ3ViewHintsObject     viewHints,
  713.                                  TQ3CameraObject         camera);
  714.  
  715. EXTERN_API_C( TQ3Status )
  716. Q3ViewHints_GetCamera            (TQ3ViewHintsObject     viewHints,
  717.                                  TQ3CameraObject *        camera);
  718.  
  719. EXTERN_API_C( TQ3Status )
  720. Q3ViewHints_SetLightGroup        (TQ3ViewHintsObject     viewHints,
  721.                                  TQ3GroupObject         lightGroup);
  722.  
  723. EXTERN_API_C( TQ3Status )
  724. Q3ViewHints_GetLightGroup        (TQ3ViewHintsObject     viewHints,
  725.                                  TQ3GroupObject *        lightGroup);
  726.  
  727. EXTERN_API_C( TQ3Status )
  728. Q3ViewHints_SetAttributeSet        (TQ3ViewHintsObject     viewHints,
  729.                                  TQ3AttributeSet         attributeSet);
  730.  
  731. EXTERN_API_C( TQ3Status )
  732. Q3ViewHints_GetAttributeSet        (TQ3ViewHintsObject     viewHints,
  733.                                  TQ3AttributeSet *        attributeSet);
  734.  
  735. EXTERN_API_C( TQ3Status )
  736. Q3ViewHints_SetDimensionsState    (TQ3ViewHintsObject     viewHints,
  737.                                  TQ3Boolean             isValid);
  738.  
  739. EXTERN_API_C( TQ3Status )
  740. Q3ViewHints_GetDimensionsState    (TQ3ViewHintsObject     viewHints,
  741.                                  TQ3Boolean *            isValid);
  742.  
  743. EXTERN_API_C( TQ3Status )
  744. Q3ViewHints_SetDimensions        (TQ3ViewHintsObject     viewHints,
  745.                                  unsigned long             width,
  746.                                  unsigned long             height);
  747.  
  748. EXTERN_API_C( TQ3Status )
  749. Q3ViewHints_GetDimensions        (TQ3ViewHintsObject     viewHints,
  750.                                  unsigned long *        width,
  751.                                  unsigned long *        height);
  752.  
  753. EXTERN_API_C( TQ3Status )
  754. Q3ViewHints_SetMaskState        (TQ3ViewHintsObject     viewHints,
  755.                                  TQ3Boolean             isValid);
  756.  
  757. EXTERN_API_C( TQ3Status )
  758. Q3ViewHints_GetMaskState        (TQ3ViewHintsObject     viewHints,
  759.                                  TQ3Boolean *            isValid);
  760.  
  761. EXTERN_API_C( TQ3Status )
  762. Q3ViewHints_SetMask                (TQ3ViewHintsObject     viewHints,
  763.                                  const TQ3Bitmap *        mask);
  764.  
  765. EXTERN_API_C( TQ3Status )
  766. Q3ViewHints_GetMask                (TQ3ViewHintsObject     viewHints,
  767.                                  TQ3Bitmap *            mask);
  768.  
  769. /* Call Q3Bitmap_Empty when done with the mask    */
  770. EXTERN_API_C( TQ3Status )
  771. Q3ViewHints_SetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  772.                                  TQ3DrawContextClearImageMethod  clearMethod);
  773.  
  774. EXTERN_API_C( TQ3Status )
  775. Q3ViewHints_GetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  776.                                  TQ3DrawContextClearImageMethod * clearMethod);
  777.  
  778. EXTERN_API_C( TQ3Status )
  779. Q3ViewHints_SetClearImageColor    (TQ3ViewHintsObject     viewHints,
  780.                                  const TQ3ColorARGB *    color);
  781.  
  782. EXTERN_API_C( TQ3Status )
  783. Q3ViewHints_GetClearImageColor    (TQ3ViewHintsObject     viewHints,
  784.                                  TQ3ColorARGB *            color);
  785.  
  786.  
  787.  
  788.  
  789. #if PRAGMA_ENUM_ALWAYSINT
  790.     #pragma enumsalwaysint reset
  791. #elif PRAGMA_ENUM_OPTIONS
  792.     #pragma option enum=reset
  793. #elif defined(PRAGMA_ENUM_PACK__QD3DIO__)
  794.     #pragma options(pack_enums)
  795. #endif
  796.  
  797. #if PRAGMA_STRUCT_ALIGN
  798.     #pragma options align=reset
  799. #elif PRAGMA_STRUCT_PACKPUSH
  800.     #pragma pack(pop)
  801. #elif PRAGMA_STRUCT_PACK
  802.     #pragma pack()
  803. #endif
  804.  
  805. #ifdef PRAGMA_IMPORT_OFF
  806. #pragma import off
  807. #elif PRAGMA_IMPORT
  808. #pragma import reset
  809. #endif
  810.  
  811. #ifdef __cplusplus
  812. }
  813. #endif
  814.  
  815. #endif /* __QD3DIO__ */
  816.  
  817.